Вход

Просмотр полной версии : вопрос про Delete b form


Konstantin47
28.07.2021, 22:32
форматировал, можно вернуться к теме delete
переделал, сделал запросы GET, POST ( читало и записывало в Json)

код, который работает



var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var fs = require('fs');
const path = require('path');
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(express.static(__dirname + '/public'));
app.post('/process_post', (req, res) => {
// należy utworzyć nowy obiek
const newWeather = {
id: 1,
location: req.body.location,
id: 2,
temperature: req.body.temperature,
id: 3,
humidity: req.body.humidity,
id: 4,
pressure: req.body.pressure
};
console.log(req.body)
// читаем актуальные данные
const weather = JSON.parse(fs.readFileSync("weather.json"));
// dodać do nich nową pogodę
weather.push(newWeather);
// записать изменения
fs.writeFileSync("weather.json", JSON.stringify(weather));
res.json(newWeather);
});
app.get('/process_get', ​function(req, res) {
const records = JSON.parse(fs.readFileSync("weather.json"));
const weather = JSON.parse(fs.readFileSync("weather.json"));
res.json(weather);
});
// не работает
app.delete('/delete/:id', function(req, res) {
const weather = JSON.parse(fs.readFileSync("weather.json"));
var id = req.param("id");
weather.remove({
_id: id
}, function(err) {
if (err) {
console.log(err)
} else {
return res.send("Removed");
}
});
fs.writeFileSync("weather.json", JSON.stringify(weather));
res.json(newWeather);
});

var server = app.listen(8081, function() {
var host = server.address().address
var port = server.address().port console.log("Example app listening at //%s:%s", host, port)
}



<!DOCTYPE html>
<meta charset="utf-8">
<title>Test</title>
</head>

<body>

<form action="//127.0.0.1:8081/process_get" method="GET">
<br>
Location: <input type="text" name="location"> <br> <br><br>
temperature: temperaturę w st. C
<input type="text" name="temperature"> C<br><br>
humidity: wilgotność powietrza w %
<input type="text" name="humidity"> %<br><br>
pressure: ciśnienie w hPa
<input type="text" name="pressure"> hPa<br><br>
<br>
<input type="submit" value="GET">
</form>

<form action="//127.0.0.1:8081/process_post" method="POST">
Location: <input type="text" name="location"> <br> <br> <br>
temperature: temperaturę w st. C
<input type="text" name="temperature"> C<br><br>
humidity: wilgotność powietrza w %
<input type="text" name="humidity"> %<br><br>
pressure: ciśnienie w hPa
<input type="text" name="pressure"> hPa<br><br>
<input type="submit" value="POST">
</form>
<br>

<form action="//127.0.0.1:8081/process_delete" method="DELETE">
Location: <input type="text" id="1" name="location"><br><br>
temperature: <input type="text" id="2" name="temperature"><br><br>
humidity: <input type="text" id="3" name="humidity"><br><br>
pressure: <input type="text" id="4" name="pressure"><br><br>
<input type="submit" value="DELETE"><br>
</form>
</body>

</html>


Html
вопрос, метод post или все таки delete
В форме же input не должно ж ничего появляться? что мол, файл json прочитан, input же пустой по идее будет
отдельно вынес id, чтобы удалять этот массив.
и еще вопрос, в самом удаление html button точно также управляется, как и в пост , гет?
да я ссоздал файл json cпустым массивом и данные с пост в него нормально записываются и показываются в браузере
Гет тоже нормально все показывает
ps проблема моя с удалением пост


Спасибо
Редактировать/удалить сообщение

Konstantin47
29.07.2021, 01:12
Konstantin47, отформатируй код, удали пустые строки и посторонние символы (красные точки), это не сложно (https://beautifier.io/).
готово

ksa
29.07.2021, 08:08
weather.remove
Пример из книжки?
Меня там удивило использование этого метода. Такого вроде нет в массиве.
var id = req.param("id");
Если верить POST - добавление происходит в простой массив...
А потом как-то пытаются удаление делать по _id...

Да и сам возврат из delete() довольно странный. Т.е. не понятно как вообще доберутся до перезаписи самого "обновленного" файла.
const weather = JSON.parse(fs.readFileSync("weather.json"));

Посмотри чего там тебе возвращают...

voraa
29.07.2021, 10:13
app.delete('/delete/:id', function(req, res) {

Мне кажется, что бы это сработало, должно быть быть обращение к серверу с методом DELETE. А у вас все формы с method GET или POST

ksa
29.07.2021, 11:24
Мне кажется, что бы это сработало, должно быть быть обращение к серверу с методом DELETE
Все верно. :yes:

Konstantin47
30.07.2021, 02:29
в бьютифул я вставлял только js. html я вообще не трогал. убрал пробелы и все. я не знаю, что еще не упорядочено. кроме кода просто вопросы
1. весь delete просто, как пример кода был. Фильтр да, с учебника, так он мне и пригодится. Но все ж уперлось в. как form cоединить с этим всем. Если я не понимаю, что задать в форме html , какой метод
и, как выводить это на button. будет ли работать, как get и post
2. я не понимаю, должно ли в input показывать данные с прочитанного json в delete ( по логике нет)

Konstantin47
30.07.2021, 19:41
Я наоборот за, чтобы код был читаем и за форматирование. в html не было красных точек и я просто поудалял пробелы. так и с js пробелы поудалял и красные точки и все, я о другом и не знал. сейчас переделаю

Konstantin47
30.07.2021, 23:41
Konstantin47, если вы будете противоречить себе так, то сложно будет вам помочь:


VS
Естественно я html файл загрузил и посмотрел на наличие красных точек. Пробелы тоже удалил. Но раз не было точек - значит не трогал.
ps мне вообще стыдно, что я не знал об этом , я бы назвал стандартизаторе "красивый код", о валидаторе знал.
Поэтому я и не нажимал там ничего, только точки удалил.
ps2 мне абсолютно не лень, что надо поправить, исправить, привести в порядок, чтобы донести нормально, просто нужен был образец, а так ну гост, стандартизация.

Я все сделал по инструкции, сейчас должно быть форматировано и ошибки исправил

Konstantin47
31.07.2021, 19:19
Пример из книжки?
Меня там удивило использование этого метода. Такого вроде нет в массиве.

Если верить POST - добавление происходит в простой массив...
А потом как-то пытаются удаление делать по _id...

Да и сам возврат из delete() довольно странный. Т.е. не понятно как вообще доберутся до перезаписи самого "обновленного" файла.

Посмотри чего там тебе возвращают...

Post - да, именно простой массив. id и Delete через id это я отдельно стал думать. Чтобы, чем-то зацепиться за элемент

voraa
31.07.2021, 21:26
Увы.
В HTML в form у атрибута method значения могут быть только GET или POST. Любое другое рассматривается как GET.

HTML Living Standard — Last Updated 30 July 2021
https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fs-method

Значит надо либо обращаться к серверу через AJAX (fetch) - там DELETE можно использовать.
Либо обращаться с методом POST, а на сервере ловить нужный path (/process_delete)

Konstantin47
01.08.2021, 01:03
Увы.
В HTML в form у атрибута method значения могут быть только GET или POST. Любое другое рассматривается как GET.

HTML Living Standard — Last Updated 30 July 2021
https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fs-method

Значит надо либо обращаться к серверу через AJAX (fetch) - там DELETE можно использовать.
Либо обращаться с методом POST, а на сервере ловить нужный path (/process_delete)

ps значит post было правильно ( читая комментария, delete поставил про форматировании)
Можно уточнить 2 вопроса
1. в Delete button точно также будет работать, как и в GET, POST?
2. в окнах input в Delete ничего же не должно само появляться, когда DELETE данные массива прочитает для удаления?
Спасибо

voraa
01.08.2021, 07:44
ps значит post было правильно
Нет.
У вас на сервере (в Node) стояло

app.delete('/delete/:id', function(req, res) {

app.delete сработает только если обращение к серверу идет с методом DELETE (как нибудь с помощью fetch, например)

Если в форме сделать метод POST (или GET), то и на сервере надо обрабатывать обращение с этим методом. И смотреть на путь запроса

app.post('/process_delete', function(req, res) {
или
app.get('/process_delete', function(req, res) {

тогда и необходимые параметры можно передать.